<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>

	<body>
		<p>
			全局属性：undefined,Infinity、NaN<br>
			全局函数：isNaN(),parseInt(),eval()<br>
			构造函数：Date(),RegExp(),String(),Object(),Array()<br>
			全局对象：Math,JSON<br>
			不可改版的原始值(undefined,null,布尔值,数字和字符串)和可变的对象引用<br>
			
		</p>
		<script type="text/javascript">
			var n3 = 1;//全局变量
			function f(){};//全局函数 
			this.num = 1;//没用var,所以这是一个可配置的全局变量,可以用delete删除
			
			window.onload = function(){
				var str = "test";
				str.len = 4;
				var l = str.len;
				console.log(l);//此时l为undefined,因为给字符串对象创建属性只是临时的,不会被保存,所以当第二行执行完毕后,其len属性就消失了
				str.toUpperCase();//其实此时str值并未改变,返回到是新字符串
				var n = 199;//进制转换2~36
				console.log(n.toString(2));//转换成二进制：11000111
				console.log(n.toString(16));//转换成十六进制：c7
				var n1 = 223.455;
				console.log(n1.toFixed(2)); //223.46四舍五入 
				console.log(n1.toExponential(2));//2.23*e² 参数表示小数位数 
				console.log(n1.toPrecision(4)); //获取指定有效位数的数字转为字符串,会进行四舍五入,或返回指数形式[当有效位小于整数位数时]
				console.log(parseInt("3 casdas"));//3
				console.log(parseInt("3.12"));//3
				console.log(parseInt("0xFF"));//255
				console.log(parseFloat("3.14 casdas"));//3.14
				console.log(parseInt("110",2));//6
				console.log(new Date().toString());
				console.log(new Date().valueOf());//从太平洋时间2010/1/1至今的毫秒值
				var data = [7,8,9];//in 运算符希望左边是字符串或可以转化为字符串的值,希望其值在右操作数(对象)中存在相同的属性(注意是属性哦,数组的话是索引)
				console.log("2" in data);//true有索引为2
				console.log(1 in data);//true有索引为1
				console.log(7 in data);//false没有索引为7
				var data1 = {x:1,y:2};
				console.log("x" in data1);//true
				delete data1.x;//删除x属性 
				console.log("x" in data1);//false
				//delete只是断开属性和宿主对象的关系,而不回去操作属性中的属性
				//delete运算符只能删除自有属性,不能删除继承属性
				//delete删除成功或没有任何副作用时,返回true
				var n2 = {p:{x:1}};
				var b = n2.p;
				delete n2.p;
				console.log("b.x = " + b.x);//b.x=1
				console.log(delete n2.p);//true
				console.log(delete n2.toString); //true
				console.log(delete 2);//true
				console.log(delete Object.prototype); //false 属性不可配置
				console.log(delete this.n3)	;//false 不能删除var声明[严格声明]的全局变量[属性 ]
				console.log(delete this.f); //false 不能删除全局函数 
				console.log(delete num);//true非严格模式下可以省略this
				console.log(delete this.num);//true严格模式下
				//判断对象中是否含有某属性[继承来的不算]
				console.log(n2.hasOwnProperty("p"));//false
				//!== 判断属性是否存在并且其值是不是不等于undefined
				console.log(n2.p !== undefined);//false 
				var n4 = {x:undefined};
				console.log(n4.x !== undefined);//false属性存在但是等于undefined
				console.log("x" in n4);//true
				
			};
			
		</script>
	</body>

</html>